// Created by WXX on 2021/11/17 10:12
#include <iostream>
#include <vector>
#include <set>

using namespace std;

/**
 * 执行用时：80 ms, 在所有 C++ 提交中击败了80.07%的用户
 * 内存消耗：37.8 MB, 在所有 C++ 提交中击败了62.68%的用户
 */
typedef pair<int, int> PII;
const int INF = 2e9;

class MyCalendar {
public:
    set<PII> S;

    MyCalendar() {
        S.insert({-INF, -INF});
        S.insert({INF, INF});
    }

    bool book(int start, int end) {
        auto i = S.lower_bound({start, -INF});
        auto j = i--;
        PII t(start, end);
        if (check(*i, t) || check(*j, t)) return false;
        S.insert(t);
        return true;
    }

    // 判断区间a和区间b是否有交集
    bool check(PII a, PII b) {
        if (a.second <= b.first || b.second <= a.first) return false;
        return true;
    }
};

int main() {

    MyCalendar *t = new MyCalendar();
    cout << t->book(10, 20) << endl;  // 1
    cout << t->book(15, 25) << endl;  // 0
    cout << t->book(20, 30) << endl;  // 1

    return 0;
}
